package cn.gorit.admin.service;

import cn.gorit.common.enums.ResultEnums;
import cn.gorit.common.enums.StateEnums;
import cn.gorit.common.exception.BlogException;
import cn.gorit.common.lang.Result;
import cn.gorit.dto.content.BlogDto;
import cn.gorit.entity.content.About;
import cn.gorit.entity.content.Blog;
import cn.gorit.mapper.content.AboutMapper;
import cn.gorit.mapper.content.BlogMapper;
import cn.gorit.utils.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @version v1.0
 * @Classname ContentService
 * @Description TODO
 * @Author CodingGorit
 * @Created on 2021/4/16 0:21
 * @IDLE IntelliJ IDEA
 **/
@Service
public class ContentService {

    @Autowired
    AboutMapper aboutMapper;

    @Autowired
    BlogMapper blogMapper;

    // 帖子相关
    public Result<Page<Blog>> getBlogListByPage(Page<Blog> page) {
        // 查询数据
        List<Blog> blogDtoList = blogMapper.getBlogListBackByPage(page);
        page.setList(blogDtoList);
        // 查询总数
        page.setTotalCount(blogMapper.getBlogListBackCount(page));
        return new Result<>(ResultEnums.QUERY_SUCCESS.getCode(),ResultEnums.QUERY_SUCCESS.getMsg(),page);
    }

    //  查看帖子详情
    public Result<Blog> getBlogById(String blogId) {
        return new Result<>(ResultEnums.QUERY_SUCCESS.getCode(),ResultEnums.QUERY_SUCCESS.getMsg(),blogMapper.getBlogById(blogId));
    }

    // 帖子置顶 【】
    public Result<Object> updateBlogTopById(Integer status, String blogId) {
        String msg = "";
        if (status.equals(1)) {
            blogMapper.updateBlogTopById(StateEnums.ENABLE_TOP.getCode(),blogId);
            msg = StateEnums.ENABLE_TOP.getMsg();
        }
        if (status.equals(0)) {
            blogMapper.updateBlogTopById(StateEnums.DISABLE_TOP.getCode(), blogId);
            msg = StateEnums.DISABLE_TOP.getMsg();
        }
        return new Result<>(ResultEnums.UPDATE_SUCCESS.getCode(),msg);
    }

    // 管理员添加帖子 【TODO】

    // ================================  关于相关  ============================

    /**
     * 保存
     * @param about
     */
    public void saveAbout(About about) {
        aboutMapper.save(about);
    }

    /**
     * 更新
     *
     * @param about
     */
    public void updateAbout(About about) {
        aboutMapper.updateAbout(about);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    public About getAboutById(Integer id) {
        return aboutMapper.getAboutById(id);
    }

    /**
     * 根据id删除
     * @param id
     */
    public void deleteAboutById(Integer id) {
        aboutMapper.deleteAboutById(id);
    }

    /**
     * 根据id启用 或者禁用
     * 至少保证一个存在，不能同时启用两个
     * @param id
     */
    @Transactional(rollbackFor = Exception.class)
    public Result<Object> enableAboutById(Integer id, Integer enable) {
        // 查询是否存在已经启用的 关于我的，如果有，但是开启的是其他的，则会抛出异常
        if (enable.equals(1)) // 启用
            aboutMapper.updateEnable(StateEnums.ENABLED.getCode(),id);
        if (enable.equals(0)) // 禁用
            aboutMapper.updateEnable(StateEnums.DISABLE.getCode(),id);
        About about = aboutMapper.getAbout();
        if (about == null) {
            throw new BlogException(ResultEnums.ERROR.getCode(),"只能启用一个或者至少得保有一个关于");
        }
        return new Result<>(ResultEnums.UPDATE_SUCCESS.getCode(),ResultEnums.UPDATE_SUCCESS.getMsg());
    }

    /**
     * 分页查询 OK
     * @param page
     * @return
     */
    public Page<About> getAboutByPage(Page<About> page) {
        // 查询数据
        List<About> aboutlist = aboutMapper.getByPage(page);
        page.setList(aboutlist);
        // 查询总数
        int totalCount = aboutMapper.getCountByPage(page);
        page.setTotalCount(totalCount);
        return page;
    }
}
